{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn import preprocessing\n",
    "from sklearn.preprocessing import PolynomialFeatures  # 非线性逻辑回归\n",
    "# 数据是否需要标准化\n",
    "scale = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 载入数据\n",
    "data = np.genfromtxt(\"LR-testSet2.txt\", delimiter=\",\")\n",
    "x_data = data[:,:-1]\n",
    "y_data = data[:,-1,np.newaxis]\n",
    "    \n",
    "def plot():\n",
    "    x0 = []\n",
    "    x1 = []\n",
    "    y0 = []\n",
    "    y1 = []\n",
    "    # 切分不同类别的数据\n",
    "    for i in range(len(x_data)):\n",
    "        if y_data[i]==0:\n",
    "            x0.append(x_data[i,0])\n",
    "            y0.append(x_data[i,1])\n",
    "        else:\n",
    "            x1.append(x_data[i,0])\n",
    "            y1.append(x_data[i,1])\n",
    "\n",
    "    # 画图\n",
    "    scatter0 = plt.scatter(x0, y0, c='b', marker='o')\n",
    "    scatter1 = plt.scatter(x1, y1, c='r', marker='x')\n",
    "    #画图例\n",
    "    plt.legend(handles=[scatter0,scatter1],labels=['label0','label1'],loc='best')\n",
    "    \n",
    "plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  同上，第二种画图方式\n",
    "x_data = data[:,:-1]\n",
    "y_data = data[:,-1]\n",
    "plt.scatter(x_data[:,0],x_data[:,1],c=y_data) #c代表颜色，分类传入颜色\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义多项式回归,degree的值可以调节多项式的特征\n",
    "poly_reg  = PolynomialFeatures(degree=3) \n",
    "# 特征处理\n",
    "x_poly = poly_reg.fit_transform(x_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sigmoid(x):\n",
    "    return 1.0/(1+np.exp(-x))\n",
    "\n",
    "def cost(xMat, yMat, ws):\n",
    "    left = np.multiply(yMat, np.log(sigmoid(xMat*ws)))\n",
    "    right = np.multiply(1 - yMat, np.log(1 - sigmoid(xMat*ws)))\n",
    "    return np.sum(left + right) / -(len(xMat))\n",
    "\n",
    "def gradAscent(xArr, yArr):\n",
    "    \n",
    "    if scale == True:\n",
    "        xArr = preprocessing.scale(xArr)\n",
    "    xMat = np.mat(xArr)\n",
    "    yMat = np.mat(yArr)\n",
    "    \n",
    "    lr = 0.03\n",
    "    epochs = 50000\n",
    "    costList = []\n",
    "    # 计算数据列数，有几列就有几个权值\n",
    "    m,n = np.shape(xMat)\n",
    "    # 初始化权值\n",
    "    ws = np.mat(np.ones((n,1)))\n",
    "    \n",
    "    for i in range(epochs+1):             \n",
    "        # xMat和weights矩阵相乘\n",
    "        h = sigmoid(xMat*ws)   \n",
    "        # 计算误差\n",
    "        ws_grad = xMat.T*(h - yMat)/m\n",
    "        ws = ws - lr*ws_grad \n",
    "        \n",
    "        if i % 50 == 0:\n",
    "            costList.append(cost(xMat,yMat,ws))\n",
    "    return ws,costList"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 4.16787292]\n",
      " [ 2.72213524]\n",
      " [ 4.55120018]\n",
      " [-9.76109006]\n",
      " [-5.34880198]\n",
      " [-8.51458023]\n",
      " [-0.55950401]\n",
      " [-1.55418165]\n",
      " [-0.75929829]\n",
      " [-2.88573877]]\n"
     ]
    }
   ],
   "source": [
    "# 训练模型，得到权值和cost值的变化\n",
    "ws,costList = gradAscent(x_poly, y_data)  # 10个特征，即10个权值\n",
    "print(ws)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "# 获取数据值所在的范围\n",
    "x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1\n",
    "y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1 # 就是图矩形框大小\n",
    "\n",
    "# 生成网格矩阵\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),\n",
    "                     np.arange(y_min, y_max, 0.02))\n",
    "\n",
    "# np.r_按row来组合array， \n",
    "# np.c_按colunm来组合array\n",
    "# >>> a = np.array([1,2,3])\n",
    "# >>> b = np.array([5,2,5])\n",
    "# >>> np.r_[a,b]\n",
    "# array([1, 2, 3, 5, 2, 5])\n",
    "# >>> np.c_[a,b]\n",
    "# array([[1, 5],\n",
    "#        [2, 2],\n",
    "#        [3, 5]])\n",
    "# >>> np.c_[a,[0,0,0],b]\n",
    "# array([[1, 0, 5],\n",
    "#        [2, 0, 2],\n",
    "#        [3, 0, 5]])\n",
    "# 生成测试点，乘以权值，在sigmoid，是预测值，每个预测点，给一个颜色\n",
    "z = sigmoid(poly_reg.fit_transform(np.c_[xx.ravel(), yy.ravel()]).dot(np.array(ws)))\n",
    "# ravel与flatten类似，多维数据转一维。flatten不会改变原始数据，ravel会改变原始数据\n",
    "for i in range(len(z)):\n",
    "    if z[i] > 0.5:\n",
    "        z[i] = 1\n",
    "    else:\n",
    "        z[i] = 0\n",
    "z = z.reshape(xx.shape)\n",
    "\n",
    "# 等高线图\n",
    "cs = plt.contourf(xx, yy, z)\n",
    "plot() \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             precision    recall  f1-score   support\n",
      "\n",
      "        0.0       0.86      0.83      0.85        60\n",
      "        1.0       0.83      0.86      0.85        58\n",
      "\n",
      "avg / total       0.85      0.85      0.85       118\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 预测\n",
    "def predict(x_data, ws):\n",
    "#     if scale == True:\n",
    "#         x_data = preprocessing.scale(x_data)\n",
    "    xMat = np.mat(x_data)\n",
    "    ws = np.mat(ws)\n",
    "    return [1 if x >= 0.5 else 0 for x in sigmoid(xMat*ws)]\n",
    "\n",
    "predictions = predict(x_poly, ws)\n",
    "\n",
    "print(classification_report(y_data, predictions))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "test = [[2,3]]\n",
    "# 定义多项式回归,degree的值可以调节多项式的特征\n",
    "poly_reg  = PolynomialFeatures(degree=3) \n",
    "# 特征处理\n",
    "x_poly = poly_reg.fit_transform(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  2.,  3.,  4.,  6.,  9.,  8., 12., 18., 27.]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_poly # x0偏置是1，x1，x2，x1平方，x1x2，x2平方，此时degree为2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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jo2IXZKWA7dHxLzL1pK+CNwaEdf3On6VNYCZjrpyU8WSxYu46NQje57MYVz79u2310+dvcw41wBuAc4sHp8J3NwlzL6S9i4eLwWOAX445LxzknM3n3379vP0U2evyrAF4GLgHZJ+DLyjeI6kNZKuKMYcBkxK2gJ8B7g4IkZWAHLu5rNv336efursVRmqAETEkxFxXEQcUvz5VPH6ZER8qHj8vYg4MiLeWPx5ZR3B5yLnbj779u3n6afOXhV3Atfk2rdvv71+6uxVadztoHPe19O+fft5+qmzl/GewMYY01K8J7AxxpieuAAYY0xLcQEwxpiW4k3ha3Tt27ffXj919io07iqgnDd2tm/ffp5+6uxlvCl8pu3c9u3bz9NPnb0qjSsAObdz27dvP08/dfaqNK4A5NzObd++/Tz91Nmr0rgCkHM7t3379vP0U2evSuMWgXNu57Zv336efursZXwrCGOMaSm+FYQxxpieuAAYY0xLcSdwja59+/bb66fOXoVhN4U/DdhIZ9vHtRHR9QN7SScAlwGLgCsi4uJ+ju9N4e3bt5+Dnzp7mXGuATwAnArcMU+YRcDngBOBw4EzJB0+5LxzknM3n3379vP0U2evylAfAUXEdgBJ8w1bC+yIiIeLsdcB64GRbAyfczefffv28/RTZ6/KOBaBVwCPlp5PFa91RdIGSZOSJqenpweeLOduPvv27efpp85elZ4FQNJtkh7o8rW+zzm6/Xow58JDRExExJqIWLNs2bI+p/g9OXfz2bdvP08/dfaq9PwIKCLePuQcU8Cq0vOVwM4hjzknMwsmVVbTh3Ht27ffXj919qrU0gks6Xbgo92uApK0F/AQcBzwGHA38P6I2NbruO4ENsaYwRjbVUCSTpE0BRwNfF3S5uL1AyVtAoiI3cC5wGZgO/CVfr75G2OMGS3DXgV0I3Bjl9d3AutKzzcBm4aZyxhjTL24E7hG1759++31U2evQuNuB53zvp727dvP00+dvYz3BM60m8++fft5+qmzV6VxBSDnbj779u3n6afOXpXGFYCcu/ns27efp586e1UaVwBy7uazb99+nn7q7FVp3CJwzvt62rdvP08/dfYy3hPYGGNaivcENsYY0xMXAGOMaSkuAMYY01J8K4gaXfv27bfXT529Co27Cijndm779u3n6afOXsa3gsi0ndu+fft5+qmzV6Vx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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 获取数据值所在的范围\n",
    "x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1\n",
    "y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1\n",
    "\n",
    "# 生成网格矩阵\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.2), # 0.02表示间隔，你打0.2试试\n",
    "                     np.arange(y_min, y_max, 0.2))\n",
    "\n",
    "plt.scatter(xx,yy)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# [[1,1],[2,2]]扁平化后变为[1,1,2,2],二维变1维"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
